import { initMixin } from './init'
import { stateMixin } from './state'
import { renderMixin } from './render'
import { eventsMixin } from './events'
import { lifecycleMixin } from './lifecycle'
import { warn } from '../util/index'

// Vue 构造函数
function Vue (options) {
  if (process.env.NODE_ENV !== 'production' &&
    !(this instanceof Vue)
  ) {
    warn('Vue is a constructor and should be called with the `new` keyword')
  }
  // 只有一个 _init 方法
  this._init(options)
}

initMixin(Vue) // 挂载 _init 方法，其中初始化 生命周期、事件、调用钩子函数等
stateMixin(Vue) // 响应式数据以及相关方法，比如 data、props、watch、computed 等
eventsMixin(Vue) // 挂载事件相关的方法，如 $on、$off、$once、$emit
lifecycleMixin(Vue) // 挂载生命周期相关的方法，如 $forceUpdate、$destroy 等
renderMixin(Vue)

export default Vue
